package org.example.big_data.controller;

import com.aliyuncs.exceptions.ClientException;
import org.example.big_data.pojo.Result;
import org.example.big_data.utils.AliOSSUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@RestController

public class FileUploadController {
    @PostMapping("/upload")
    // 上传文件，前端通过表单上传一个完整的文件，转化为字节流进入后端，
    // 后端MultipartFile接收前端上传的文件，并将文件保存到服务器的磁盘上file.transferTo()
    // 最终返回给前端上传后的文件在服务器的存储中的路径
    public Result<String> upload(MultipartFile file) throws IOException, ClientException {
        // 1.获取原始文件名:MultipartFile提供getOriginalFilename()方法获取前端请求的原始文件名
        String originalFilename = file.getOriginalFilename();
        //  将文件保存到服务器的磁盘上
        //  避免文件覆盖的问题
        //  使用UUID重新生成文件名，防止文件名称重复造成文件覆盖
        //解释： UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
        //  1. UUID.randomUUID().toString()生成一个随机的UUID字符串，作为新的文件名的一部分。
        //  2. originalFilename.substring(originalFilename.lastIndexOf(".")) 获取原始文件名的后缀，
        //  3. 将两者拼接起来，得到一个新的文件名。
        String filename = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));

        /**
         * 调用自己写的工具类，传入参数：文件名和文件流（由MultipartFile的getInputStream获取前端表单提交的文件流），上传到OSS服务器上
         */
        String fileUrl = AliOSSUtil.uploadFile(filename,file.getInputStream());

        return Result.success(fileUrl);
    }
}
